package jmine.tec.subscription;

import java.util.List;

import jmine.tec.utils.register.Receiver;

/**
 * Um {@link PublisherManager} consolida os {@link Publisher} disponiveis
 * 
 * @author takeshi
 */
public interface PublisherManager extends Receiver<Publisher<?>> {

    /**
     * Devolve um publisher associado a um nome. Este metodo nao deve devolver <code>null</code> mas pode lancar uma excecao se um
     * {@link Publisher} nao for encontrado.
     * 
     * @param name String
     * @return {@link Publisher}
     */
    Publisher<?> getPublisher(String name);

    /**
     * Devolve uma lista com todos os {@link Publisher}'s disponiveis. Modificacoes nesta lista nao devem ser refletidas no
     * {@link PublisherManager}.
     * 
     * @return {@link List}
     */
    List<Publisher<?>> getPublishers();

}
